Vamos la...
Uma resposta que vai simplificar um pouco tudo isso.
( OFF Topic )-----------------------------------------------------------------------------
Não é teimosia...
E sim meu modo de Aprender e Entender as coisas,
Eu observo o funcionamento e assimilo,
Eu não decoro nomes (não consigo, e nunca consegui)
Para vc ter uma ideia, teve uma vez que tive que escrever um texto que tinha dezenas de "você" ,
toda hora eu tinha que voltar e ve onde ficava o "^" , parece algo ridículo não é.
Você falou que eu dependo muito da matemática, bem... eu não sei nem a tabuada, não decoro .
Deveria sentir vergonha de ser assim?
não sou disfuncional nem tenho um raciocínio inoperante, muito pelo contrario...
Bem, Apenas tenho um modo de funcionamento diferente . Ir contra isso, apenas seria ir contra minha própria natureza e dificultar ainda mais meu aprendizado.
------------------------------------------------------------( Fim OFF Topic )-----------------------------------------------
Sobre oq eu queria fazer com a chamada da macro pela variável,
eu passo os parâmetros comuns de funcionamento e uso a Array publica que já tenho.
eu estou usando com variável publica o tal "ColunO" que pega os setores da planilha
Apenas não xingue...
foi apenas um teste e não sei se vou usar assim, apesar de funcionar "complicou mais do que o necessário
essa parte fica dentro de um userform onde se escolhe os setores e aplicas algumas macros ...
If ordemcM = True Then
'If linha_ordem = True Then Ma = -1 Else Ma = 1
If cresc_ordem = True Then Ab = 1 Else Ab = 2
'If zigzag_ordem = True Then If incs <> "" Then Ac = incs Else Ac = 1 Else Ac = 0
If ValXcres = True Then Ab = 3
If VaLMencres = True Then Ab = 4
Call DefineArray(Cs, "OrdenaARRAY", Ab, inCS.Value)
End If
Essa macro chama a macro que localiza a range do setor e define a parte util "com valores" Na Array publica ColunO
Sub DefineArray(ByVal setor As Variant, ByVal NomeMacro As String, _
Optional ByVal tipo_chamada As Variant, Optional ByVal Valor_estimado As Variant)
Call SetorL(setor)
Li = Cells(Li - 1, Ti).End(xlDown).row - 1
Lf = Cells(Rows.Count, Ti).End(xlUp).row + 1
k = Range(Ti & Li, Ci & Lf).Rows.Count
ColunO = Range(Ti & Li, Cf & Lf).Value2
Application.Run NomeMacro, tipo_chamada, Valor_estimado
Range(Ti & Li, Cf & Lf).Value2 = ColunO
End Sub
e essa ...Func=1 organiza a Array em ordem crescente
ou essas sem alterar a ordem dos valores...
desloca as linhas para que o valor escolhido fique no canto esquerdo x=9 ( 5,3,1,6,9)>(9,5,3,1,6,)
ou
o menor valor fique no canto esquerdo ( 5,3,1,6,9)>(1,6,9,5,3)
Sub OrdenaARRAY(ByVal cres1_decre2 As Byte, Optional ByVal Valor_vai_esqueda As Variant)
Dim A As Variant, b As Variant, inC As Long, i As Long, Ci1 As Long, Cf1 As Long
func = cres1_decre2
If Limit = 1 Then Exit Sub
x = Valor_vai_esqueda * 1
Lfim = UBound(ColunO, 1): TCo = UBound(ColunO, 2)
Ci1 = 4 ' coluna inicial de dados da array
'-------------------------------------------------------------------------(inicio do loop )
If func > 2 Then
For L = 1 To Lfim
If func = 3 Then ' ---<<----( ORDEM POR VALOR X)---0
Cx = Ci1
For i = Ci1 To TCo
A = ColunO(L, i)
If A = x Then Cx = i
Next
End If
If func = 4 Then ' ---<<----(menor valor na esquerda )---0
y = ColunO(L, Ci1)
Cx = Ci1
For i = Ci1 + 1 To TCo
A = ColunO(L, i)
If A < y Then y = A: Cx = i
Next
End If
If Cx > 4 Then
For QL = 1 To Cx - Ci1
A = ColunO(L, Ci1)
For cl = Ci1 To TCo - 1
ColunO(L, cl) = ColunO(L, cl + 1)
Next
ColunO(L, TCo) = A
Next
End If
Next
End If
'-------------------------------------------------------------------------------------------------
If func = 1 Then ' ---<<----( ordena valor Crescente)---0
For Lx = 1 To Lfim
inC = Ci1:
i = inC + 1
Do
A = ColunO(Lx, inC): b = ColunO(Lx, inC + 1)
If A > b Then
ColunO(Lx, inC) = b: C = A
ColunO(Lx, inC + 1) = C
If inC > Ci1 Then inC = inC - 1
Else
inC = i: i = i + 1
End If
Loop Until inC = TCo
Next
End If
'----------------------------------------------------------------------------------------------------
End Sub
Repara não, apenas ideias malucas...
acabei tomando posso do tópico do cara,
mas como o assunto é referente pergunta dele..."Acho" que não tem importância.
Att.
Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.
"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"
Postado : 14/08/2014 4:04 am